{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import mnist_reader\n",
    "X_train, y_train = mnist_reader.load_mnist('./', kind='train')\n",
    "X_test, y_test = mnist_reader.load_mnist('./', kind='t10k')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       ...,\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60000, 784)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60000,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "some_digit = X_train[36000]\n",
    "some_digit_img = some_digit.reshape(28,28)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(some_digit_img,cmap = matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train[36000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9\n",
      "0\n",
      "0\n",
      "3\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "for i in range(5):\n",
    "    print(y_train[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for i in range(10):\n",
    "#     print(y_train[i])\n",
    "#     some_digit = X_train[i]\n",
    "#     some_digit_img = some_digit.reshape(28,28)\n",
    "#     plt.imshow(some_digit_img,cmap = matplotlib.cm.binary)\n",
    "#     plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([25155,  9430, 27632, ...,  7790, 43737, 56904])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "shuffle_index = np.random.permutation(60000)\n",
    "shuffle_index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train,y_train = X_train[shuffle_index],y_train[shuffle_index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       ...,\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0],\n",
       "       [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, ..., False, False, False])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_8 = (y_train == 8)\n",
    "y_train_8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False, False, ..., False, False, False],\n",
       "       [ True, False, False, ..., False, False, False],\n",
       "       [False, False, False, ..., False, False, False],\n",
       "       ...,\n",
       "       [False, False, False, ..., False, False, False],\n",
       "       [False, False, False, ..., False, False, False],\n",
       "       [False,  True, False, ..., False, False, False]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_8.reshape(10,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_test_8 = (y_test == 8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([False])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import SGDClassifier\n",
    "sgd_clf = SGDClassifier(random_state = 42)\n",
    "sgd_clf.fit(X_train,y_train_8)\n",
    "sgd_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((60000, 784), (60000,), (10000, 784), (10000,))"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape,y_train.shape,X_test.shape,y_test_8.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.97245, 0.9718 , 0.9477 ])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "cross_val_score(sgd_clf,X_train,y_train_8,cv=3,scoring=\"accuracy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False],\n",
       "       [False],\n",
       "       [False],\n",
       "       ...,\n",
       "       [False],\n",
       "       [False],\n",
       "       [False]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.base import BaseEstimator\n",
    "class Never8_classifier(BaseEstimator):# \n",
    "    def fit(self,X,y):\n",
    "        pass\n",
    "    def predict(self,X):\n",
    "        return np.zeros((len(X),1),dtype=bool)\n",
    "    \n",
    "np.zeros((len(X_train),1),dtype=bool)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.8994 , 0.90045, 0.90015])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "never_8_clf = Never8_classifier()\n",
    "cross_val_score(never_8_clf,X_train,y_train_8,cv=3,scoring=\"accuracy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_predict\n",
    "y_train_pred = cross_val_predict(sgd_clf,X_train,y_train_8,cv=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[52475,  1525],\n",
       "       [  636,  5364]])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "confusion_matrix(y_train_8,y_train_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[54000,     0],\n",
       "       [    0,  6000]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_prefect_predictions = y_train_8\n",
    "confusion_matrix(y_train_8,y_train_prefect_predictions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7786326026999565"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import precision_score,recall_score\n",
    "precision_score(y_train_8,y_train_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.894"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_8,y_train_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8323376522616185"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import f1_score\n",
    "f1_score(y_train_8,y_train_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# from sklearn.linear_model import LogisticRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# clf = LogisticRegression()\n",
    "# clf.fit(X_train,y_train)\n",
    "# pred_proba = clf.predict_proba(X_test)[:, 1]\n",
    "# threshold = 0.75\n",
    "# pred_label = pred_proba > threshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1380939.41382548])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_scores = sgd_clf.decision_function([some_digit])\n",
    "y_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "threshold = -1637883\n",
    "y_some_digit_pred = (y_scores > threshold)\n",
    "y_some_digit_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "threshold = 2000000\n",
    "y_some_digit_pred = (y_scores > threshold)\n",
    "y_some_digit_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(60000,)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_scores = cross_val_predict(sgd_clf,X_train,y_train_8,cv=3,method=\"decision_function\")\n",
    "y_scores.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import precision_recall_curve\n",
    "precision,recalls,threshold = precision_recall_curve(y_train_8,y_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):\n",
    "    plt.plot(thresholds, precisions[:-1], \"b--\", label=\"Precision\", linewidth=2)\n",
    "    plt.plot(thresholds, recalls[:-1], \"g-\", label=\"Recall\", linewidth=2)\n",
    "    plt.xlabel(\"Threshold\", fontsize=16)\n",
    "    plt.legend(loc=\"upper left\", fontsize=16)\n",
    "    plt.ylim([0, 1])\n",
    "\n",
    "plt.figure(figsize=(8, 4))\n",
    "plot_precision_recall_vs_threshold(precision, recalls, threshold)\n",
    "plt.xlim([-700000, 700000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.\n",
      "findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 21484 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 22238 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 21484 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 22238 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 31934 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 24230 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 31934 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 24230 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "def plot_precision_vs_recall(precision,recalls):\n",
    "    plt.plot(recalls,precision,\"b-\", linewidth=2)\n",
    "    plt.xlabel(\"召回\", fontsize=16)\n",
    "    plt.ylabel(\"精度\", fontsize=16)\n",
    "    plt.axis([0, 1, 0, 1])\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "plot_precision_vs_recall(precision, recalls)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8087155963302752"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_pred_90 = (y_scores>30000)\n",
    "precision_score(y_train_8,y_train_pred_90)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8815"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_8,y_train_pred_90)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "fpr,tpr,threshold = roc_curve(y_train_8,y_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 20551 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 27491 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 31867 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 29575 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 20551 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 27491 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 31867 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 29575 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 30495 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 30495 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "def plot_roc_curve(fpr, tpr, label=None):\n",
    "    plt.plot(fpr, tpr, linewidth=2, label=label)\n",
    "    plt.plot([0, 1], [0, 1], 'k--')\n",
    "    plt.axis([0, 1, 0, 1])\n",
    "    plt.xlabel('假正类率', fontsize=16)\n",
    "    plt.ylabel('真正类率', fontsize=16)\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "plot_roc_curve(fpr, tpr)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n",
      "  from numpy.core.umath_tests import inner1d\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "forest_clf = RandomForestClassifier(n_estimators=10,random_state=42)\n",
    "y_probas_forest = cross_val_predict(forest_clf,X_train,y_train_8,cv=3,method=\"predict_proba\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9801783302469136"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_auc_score\n",
    "roc_auc_score(y_train_8,y_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       ...,\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.]])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_probas_forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_scores_forest = y_probas_forest[:, 1]\n",
    "fpr_forest,tpr_forest,threshold_forest = roc_curve(y_train_8,y_scores_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., ..., 0., 0., 0.])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_scores_forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 20551 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 27491 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 31867 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 29575 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 20551 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 27491 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 31867 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 29575 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 30495 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 30495 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,6))\n",
    "plt.plot(fpr,tpr,\"b:\",linewidth=2,label=\"SGD\")\n",
    "plot_roc_curve(fpr_forest,tpr_forest,\"Random Forest\")\n",
    "plt.legend(loc=\"lower right\",fontsize=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9934773317901234"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roc_auc_score(y_train_8,y_scores_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([2], dtype=uint8)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.fit(X_train,y_train)\n",
    "sgd_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -469508.62254209,  -704122.55656125,    89525.34655769,\n",
       "        -1081221.17735167,   -62767.83538169, -1155857.53079695,\n",
       "         -387947.04799165, -2357144.73388537, -1380939.41382548,\n",
       "        -2604689.02088827]])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "some_digit_scores = sgd_clf.decision_function([some_digit])\n",
    "some_digit_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.argmax(some_digit_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.classes_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.classes_[np.argmax(some_digit_scores)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2], dtype=uint8)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.multiclass import OneVsOneClassifier\n",
    "ovo_clf = OneVsOneClassifier(SGDClassifier(max_iter=5,tol=-np.infty,random_state=42))\n",
    "ovo_clf.fit(X_train,y_train)\n",
    "ovo_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(ovo_clf.estimators_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2], dtype=uint8)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forest_clf.fit(X_train,y_train)\n",
    "forest_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0. , 0. , 0.7, 0. , 0.3, 0. , 0. , 0. , 0. , 0. ]])"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forest_clf.predict_proba([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.7999 , 0.80595, 0.8073 ])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(sgd_clf,X_train,y_train,cv=3,scoring=\"accuracy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.8396 , 0.8302 , 0.83035])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))\n",
    "cross_val_score(sgd_clf,X_train_scaled,y_train,cv=3,scoring=\"accuracy\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "/Users/xuzy/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[4888,   25,  125,  454,   18,    3,  392,    0,   95,    0],\n",
       "       [  14, 5717,   62,  171,   14,    1,   18,    0,    3,    0],\n",
       "       [  48,    9, 4521,  135,  840,    1,  355,    1,   89,    1],\n",
       "       [ 238,   91,   76, 5306,  155,    0,  118,    0,   15,    1],\n",
       "       [   9,    5,  594,  416, 4561,    2,  383,    1,   28,    1],\n",
       "       [   4,    4,    2,    8,    0, 5174,    3,  562,   86,  157],\n",
       "       [ 950,   20,  865,  404,  649,    0, 2906,    3,  202,    1],\n",
       "       [   0,    0,    0,    0,    0,  140,    0, 5593,   15,  252],\n",
       "       [  19,    3,   33,  144,   24,   12,   82,   38, 5639,    6],\n",
       "       [   0,    3,    0,    4,    0,   53,    1,  235,    6, 5698]])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_pred = cross_val_predict(sgd_clf,X_train_scaled,y_train,cv=3)\n",
    "conf_mx = confusion_matrix(y_train,y_train_pred)\n",
    "conf_mx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(conf_mx,cmap=plt.cm.gray)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_sums = conf_mx.sum(axis=1, keepdims = True)\n",
    "norm_conf_mx = conf_mx/row_sums"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.fill_diagonal(norm_conf_mx,0)\n",
    "plt.matshow(norm_conf_mx,cmap = plt.cm.gray)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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D3/4QwDGM//4449HdZ3y+gBg06ZNe/1cpsACMNQrlSLtBx98MP/darVmpXUrYcqnbJCGhsb/Exj1Sy8Xof9UBINBvPfeewAM+repqYkNpt/v5zpGk8mEWbNmjcro7AsHHXQQJ6g89thjmD59OgC1bnG0kPf83XffxbXXXgvAKP95//33R3wcoqX/+7//m+/BNddcM+RzlCC1dOlSTmYqLCzEpEmTMG3aNABqBxHASHp68MEHARgbkVtvvXXE45IgytfhcCj3S9qnvdkqGe/d07GBocY18zD7GqemZDU0NDQ0NEYA7WFqaHz9MOKXfriSB8DILKXC/4aGBlZTefrpp5XSArm+/G96qMuWLcOjjz7KSSiRSIS9n0zKNBcvcLR44oknsGjRIgDArl27EA6HmRpds2YNf+7/wqMnT9TpdPKzDQaDqKio4JZt6XSaG3EDX/69W7lyJQDgr3/9K1auXMl0sdS/HT9+PKZMmYK5c+cCAE466aRsT7fPG64NpobG1w85vfSXXnopVq5cqXTdIDpvy5YtaGlpGVWdYK6gc3/xxRe80D/44IN4/fXXceCBBwIwBNCJhqyursasWbNwwAEHfGljkiUasl5QGkGHw8HycgCwaNEifO973wOwO+M315jbvsZHY3rwwQdRX1/P55a9Qrds2YKpU6cCMLKCKSv2rrvuypthpximxWJBY2MjAGOeETVMf6PPORwOJdNa1mmOHTsW9913HwBg7ty5SmbtPjZw2mBqaGgMwV5feikvR3V1d999N9c+BgIBjBs3jssxSktL8cILLwAwEkasVisOPvhgAMCVV16pJA/lG6tXr+ZmzU1NTbjgggsAAI888ggikQief/55AMBZZ53FST6dnZ1Yv349e0pnnHEGG4QvG9XV1YqerslkYr3bww47jD31LxvS0KXTaSxcuJA98NNOO41jfXPnzsWzzz6LN998E4BR5vHII48AAK6++mpMmjRJMUi5jAcwjNiPf/xjAMAzzzzDknlmsxmhUGhYCcN4PK4IKASDQZYR/Oyzz/jfqUn2Xgy8jmFqaGhoaGjkA9rD1ND4+mHEL/1ZZ50FAHj//fdZ8DyVSsHhcLA3984777AYeEVFBeLxOHtRkUiEMzobGhrydwX/P55//nmWPPP5fNw/sr+/H0888QR7Qw8++CC++c1vAjC8juLiYqY7m5ubcdtt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\n",
      "text/plain": [
       "<Figure size 576x576 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_digits(instances, images_per_row=10, **options):\n",
    "    size = 28\n",
    "    images_per_row = min(len(instances), images_per_row)\n",
    "    images = [instance.reshape(size,size) for instance in instances]\n",
    "    n_rows = (len(instances) - 1) // images_per_row + 1\n",
    "    row_images = []\n",
    "    n_empty = n_rows * images_per_row - len(instances)\n",
    "    images.append(np.zeros((size, size * n_empty)))\n",
    "    for row in range(n_rows):\n",
    "        rimages = images[row * images_per_row : (row + 1) * images_per_row]\n",
    "        row_images.append(np.concatenate(rimages, axis=1))\n",
    "    image = np.concatenate(row_images, axis=0)\n",
    "    plt.imshow(image, cmap = matplotlib.cm.binary, **options)\n",
    "    plt.axis(\"off\")\n",
    "    \n",
    "cl_a, cl_b = 0, 4\n",
    "X_aa = X_train[(y_train == cl_a) & (y_train_pred == cl_a)]\n",
    "X_ab = X_train[(y_train == cl_a) & (y_train_pred == cl_b)]\n",
    "X_ba = X_train[(y_train == cl_b) & (y_train_pred == cl_a)]\n",
    "X_bb = X_train[(y_train == cl_b) & (y_train_pred == cl_b)]\n",
    "\n",
    "plt.figure(figsize=(8,8))\n",
    "plt.subplot(221); \n",
    "plot_digits(X_aa[:25], images_per_row=5)\n",
    "plt.subplot(222); \n",
    "plot_digits(X_ab[:25], images_per_row=5)\n",
    "plt.subplot(223);\n",
    "plot_digits(X_ba[:25], images_per_row=5)\n",
    "plt.subplot(224); \n",
    "plot_digits(X_bb[:25], images_per_row=5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
       "           metric_params=None, n_jobs=1, n_neighbors=5, p=2,\n",
       "           weights='uniform')"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier # KNN-k近邻 \n",
    "\n",
    "y_train_large = (y_train >= 7) # 找到实际标签 >=7\n",
    "y_train_odd = (y_train % 2 == 1)\n",
    "y_multilabel = np.c_[y_train_large, y_train_odd] # 矩阵合并\n",
    "\n",
    "knn_clf = KNeighborsClassifier()\n",
    "knn_clf.fit(X_train, y_multilabel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "noise = np.random.randint(0, 100, (len(X_train), 784))\n",
    "X_train_mod = X_train + noise\n",
    "noise = np.random.randint(0, 100, (len(X_test), 784))\n",
    "X_test_mod = X_test + noise\n",
    "y_train_mod = X_train\n",
    "y_test_mod = X_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "some_index = 5500\n",
    "plt.subplot(121);plt.imshow(X_test_mod[some_index].reshape(28, 28), cmap = matplotlib.cm.binary)\n",
    "plt.subplot(122);plt.imshow(y_test_mod[some_index].reshape(28, 28), cmap = matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_clf.fit(X_train_mod, y_train_mod)\n",
    "clean_digit = knn_clf.predict([X_test_mod[some_index]])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(clean_digit.reshape(28, 28), cmap = matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
